💡 AI 인사이트

🤖 AI가 여기에 결과를 출력합니다...

댓글 커뮤니티

쿠팡이벤트

이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

검색

    로딩 중이에요... 🐣

    [코담] 웹개발·실전 프로젝트·AI까지, 파이썬·장고의 모든것을 담아낸 강의와 개발 노트

    2 05 STATIC FILES (정적 파일) | ✅ 저자: 이유정(박사)

    🔹 정적 파일이란? 웹 페이지의 디자인을 담당하는 HTML, CSS, JavaScript, 이미지 파일 등을 의미합니다.

    ◽ 설정 파일(settings.py) 확인

    • INSTALLED_APPS에 staticfiles 앱 추가 Django가 정적 파일을 처리할 수 있도록 하기 위해 INSTALLED_APPS 안에 아래 항목이 반드시 있어야 합니다:
    INSTALLED_APPS = [
        # 기본 앱들...
        'django.contrib.staticfiles',  # 정적 파일을 위한 기본 앱
    ]
    
    • STATIC_URL 설정 브라우저에서 정적 파일을 불러올 때 사용할 URL prefix를 지정합니다. 보통 다음과 같이 설정합니다:
    STATIC_URL = '/static/'
    

    예를 들어, static/css/style.css 파일이 있다면 실제 접근 URL은:

    http://localhost:8000/static/css/style.css
    
    • 개발 중 정적 파일 위치 지정 (STATICFILES_DIRS) 개발할 때 사용하는 정적 파일들의 경로를 지정합니다. 일반적으로 프로젝트 루트의 static 폴더를 지정합니다:
    import os
    
    STATICFILES_DIRS = [
        os.path.join(BASE_DIR, 'static'),
    ]
    

    프로젝트 루트

    프로젝트 루트/
    ├── manage.py
    ├── db.sqlite3
    ├── mysite/
    │   ├── __init__.py
    │   ├── settings.py  ← 여기에 BASE_DIR 선언됨
    │   ├── urls.py
    │   ├── views.py
    
    • BASE_DIR는 보통 settings.py 맨 위에서 다음과 같이 정의되어 있습니다:
    BASE_DIR = Path(__file__).resolve().parent.parent
    

    mysite/mysite 구조일 경우

    프로젝트 루트/
    └── mysite/
        ├── manage.py
        ├── mysite/
        │   ├── settings.py
        │   ├── urls.py
    

    이런 구조에서는 settings.py는 실제로 mysite/mysite/settings.py에 위치하므로:

    BASE_DIR = Path(__file__).resolve().parent.parent.parent
    
    • 배포 시 사용하는 정적 파일 수집 위치 (STATIC_ROOT) 배포(운영) 환경에서는 collectstatic 명령어를 통해 모든 정적 파일을 한 곳으로 모읍니다. 이때 사용할 폴더 경로를 지정합니다:
    STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
    

    배포할 때 다음 명령을 사용하여 파일들을 STATIC_ROOT로 복사합니다:

    python manage.py collectstatic
    

    📁 정리된 디렉토리 구조 예시

    mysite/
    ├── manage.py
    ├── static/    ← 개발 중 사용하는 정적 파일 폴더
    │   ├── css/
    │   │   └── style.css
    │   ├── js/
    │   │   └── script.js
    │   └── images/
    │       └── logo.png
    ├── staticfiles/  ← 배포 시 collectstatic으로 모이는 폴더(자동 생성)
    ├── mysite/
    │   ├── __init__.py
    │   ├── settings.py ← STATIC_URL,STATICFILES_DIRS,STATIC_ROOT 설정
    │   ├── urls.py
    │   ├── asgi.py
    │   └── wsgi.py
    └── polls/
        ├── __init__.py
        ├── admin.py
        ├── apps.py
        ├── migrations/
        │   └── __init__.py
        ├── models.py
        ├── tests.py
        └── views.py
    

    settings.py 예시 코드

    import os
    from pathlib import Path
    
    BASE_DIR = Path(__file__).resolve().parent.parent
    
    # 정적 파일 URL 경로
    STATIC_URL = '/static/'
    
    # 개발용 정적 파일 경로
    STATICFILES_DIRS = [
        os.path.join(BASE_DIR, 'static'),
    ]
    
    # 배포용 정적 파일 모음 경로
    STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
    

    ✨ 정리:

    • static/ 폴더는 개발 중 수동으로 생성하여 CSS, JS, 이미지 등을 보관합니다.
    • staticfiles/collectstatic 명령으로 생성되는 폴더입니다 (직접 만들지 않아도 됨).
    • polls 앱 안에 static/polls/ 폴더를 만들어 앱별 정적 파일을 둘 수도 있고 전체 통일해서 관리해도 됩니다.

    ① 앱별로 static 폴더를 나누는 방식:

    mysite/
    ├── manage.py
    ├── mysite/
    │   └── settings.py
    ├── polls/
    │   ├── static/
    │   │   └── polls/
    │   │       ├── css/
    │   │       │   └── style.css
    │   │       └── images/
    │   │           └── logo.png
    │   └── views.py
    

    템플릿에서 사용할 때:

    {% load static %}
    <link rel="stylesheet" href="{% static 'polls/css/style.css' %}">
    
    • 앱 단위로 정적 파일이 독립되어 관리가 깔끔함
    • 앱을 재사용하거나 분리할 때 유리

    ② 프로젝트 전체에서 통합 관리하는 방식 mysite/static/ 폴더를 만들어, 모든 앱의 정적 파일을 한곳에서 관리합니다.

    mysite/
    ├── manage.py
    ├── mysite/
    │   ├── settings.py
    │   └── urls.py
    ├── static/
    │   ├── css/
    │   │   └── style.css
    │   └── images/
    │       └── logo.png
    ├── polls/
    │   └── views.py
    

    템플릿에서 사용할 때:

    {% load static %}
    <link rel="stylesheet" href="{% static 'css/style.css' %}">
    
    • 구조가 단순하고 직관적
    • 소규모 프로젝트나 단일 앱일 경우 관리가 더 편리함
    TOP
    preload preload